//
//  HMStatusViewModel.swift
//  WeiBo14
//
//  Created by HM on 16/3/6.
//  Copyright © 2016年 HM. All rights reserved.
//  cell --> HMStatusViewModel --> HMStatus

import UIKit

class HMStatusViewModel: NSObject {

    // 当前视图模型引用的 status
    var status: HMStatus? {
        didSet{
            print("status didSet")
        }
    }
    
    // 当前发这条微博的用户的认证图标
    var verifiedImage: UIImage?
    // 会员图标
    var membershipImage: UIImage?
    
    // 转发数量
    var repostsCountStr: String?
    // 评论数量
    var commentsCountStr: String?
    // 点赞数量
    var attitudesCountStr: String?
    // 转发微博的内容.包含前面的昵称
    var retweetedText: String?
    // 格式化好的来源字符串
    var sourceText: String?
    
    // 创建时间字符串
    var createAtText: String? {
        get{
            return status?.createdDate?.dateDescription
//            guard let d = status?.createdDate else {
//                return nil
//            }
//            
//            let fm = NSDateFormatter()
//            fm.locale = NSLocale(localeIdentifier: "en")
//            // 取到日历对象
//            let calendar = NSCalendar.currentCalendar()
//            
//            // 测试代码
//            // d = NSDate().dateByAddingTimeInterval(-3601*24*366)
//            // 判断是否是今年
//            if isDateInThisYear(d) {
//                // 判断是否是今天
//                if calendar.isDateInToday(d) {
//                    // 取到微博创建时间与当前时间的秒差值
//                    let result = -d.timeIntervalSinceNow
//                    if result < 60 {
//                        return "刚刚"
//                    }else if result < 3600 {
//                        return "\(Int(result/60))分钟前"
//                    }else{
//                        return "\(Int(result/3600))小时前"
//                    }
//                }else if calendar.isDateInYesterday(d) {
//                    // 是昨天
//                    fm.dateFormat = "昨天 HH:mm"
//                    return fm.stringFromDate(d)
//                }else{
//                    // 其他,显示 03-09 20:20
//                    fm.dateFormat = "MM-dd HH:mm"
//                    return fm.stringFromDate(d)
//                }
//            }else{
//                // 不是今年,显示 2014-03-10
//                fm.dateFormat = "yyyy-MM-dd"
//                return fm.stringFromDate(d)
//            }
        }
    }
    
    init(status: HMStatus) {
        super.init()
        self.status = status
        
        // 设置认证
        // 拿到 status 里面的认证类型,去生成对应的认证图标 
        
        let verifiedType = status.user?.verified ?? -1
        
        switch verifiedType {
        case 1:
            verifiedImage = UIImage(named: "avatar_vip")
        case 2,3,5:// 企业认证
            verifiedImage = UIImage(named: "avatar_enterprise_vip")
        case 220: // 达人
            verifiedImage = UIImage(named: "avatar_grassroot")
        default:
            verifiedImage = nil
        }
        
        // 设置会员图标
        if let mbrank = status.user?.mbrank where mbrank > 0 {
            membershipImage = UIImage(named: "common_icon_membership_level\(mbrank)")
        }
        
        // 计算转发评论赞的三个按钮显示的字符串
        // 先计算转发的内容
        
        repostsCountStr = stringWithCount(status.reposts_count, defaultString: "转发")
        commentsCountStr = stringWithCount(status.comments_count, defaultString: "评论")
        attitudesCountStr = stringWithCount(status.attitudes_count, defaultString: "赞")
        
        // 计算转发微博的内容
        // 判断如果有转发微昵称和转发微博内容的话,就去设置转发微博内容
        if let screenName = status.retweeted_status?.user?.screen_name, text = status.retweeted_status?.text {
            retweetedText = "@\(screenName):\(text)"
        }else{
            retweetedText = "该微博已被删除,看什么看!"
        }
        
        // 处理来源的字符串
        dealSourceText(status.source)
//        dealCreateAtText(status.createdDate)
        
//        // 1. 取到转发的数量
//        let count = status.reposts_count
//        /**
//        以转发来说,如果有转发数据,那么就显示对应数量
//        - 如果低于10000 --> 直接显示数字
//        - 如果低于10900 --> 显示1万
//        - 如果高于11000(12003) --> 显示 1.x 万
//        */
//        // count = 11900 // 1.1万 逻辑写完之后一定要测试
//        if count < 10000 {
//            if count == 0 {
//                repostsCountStr = "转发"
//            }else{
//                repostsCountStr = "\(count)"
//            }
//        }else{
//            let result = CGFloat(count / 1000) / 10
//            repostsCountStr = "\(result)万"
//            
//            if repostsCountStr!.containsString(".0") {
//                repostsCountStr = repostsCountStr!.stringByReplacingOccurrencesOfString(".0", withString: "")
//            }
//        }
    }
    
    
//    // 处理创建时间的字符串 因为要根据时间的改变去动态计算,所以写成createAtText的get方法里面
//    func dealCreateAtText(createDate: NSDate?) {
//        guard let d = createDate else {
//            return
//        }
//        
//        let fm = NSDateFormatter()
//        fm.locale = NSLocale(localeIdentifier: "en")
//        // 取到日历对象
//        let calendar = NSCalendar.currentCalendar()
//        
//        // 测试代码
//        // d = NSDate().dateByAddingTimeInterval(-3601*24*366)
//        // 判断是否是今年
//        if isDateInThisYear(d) {
//            // 判断是否是今天
//            if calendar.isDateInToday(d) {
//                // 取到微博创建时间与当前时间的秒差值
//                let result = -d.timeIntervalSinceNow
//                if result < 60 {
//                    createAtText = "刚刚"
//                }else if result < 3600 {
//                    createAtText = "\(Int(result/60))分钟前"
//                }else{
//                    createAtText = "\(Int(result/3600))小时前"
//                }
//            }else if calendar.isDateInYesterday(d) {
//                // 是昨天
//                fm.dateFormat = "昨天 HH:mm"
//                createAtText = fm.stringFromDate(d)
//            }else{
//                // 其他,显示 03-09 20:20
//                fm.dateFormat = "MM-dd HH:mm"
//                createAtText = fm.stringFromDate(d)
//            }
//        }else{
//            // 不是今年,显示 2014-03-10
//            fm.dateFormat = "yyyy-MM-dd"
//            createAtText = fm.stringFromDate(d)
//        }
//    }
    
//    /// 计算 target 是否是今年
//    ///
//    /// - parameter target:
//    func isDateInThisYear(target: NSDate) -> Bool {
//        // 首页先取出当前时间
//        let currentDate = NSDate()
//        // 怎么对比 ??? 因为我们只需要判断是否是今年,所以我们只需要将年份的字符串给格式化出来进行对比就可以了
//        
//        let fm = NSDateFormatter()
//        fm.locale = NSLocale(localeIdentifier: "en")
//        // 只取年
//        fm.dateFormat = "yyyy"
//        
//        let currentDateYearStr = fm.stringFromDate(currentDate)
//        let targetDateYearStr = fm.stringFromDate(target)
//        
//        return currentDateYearStr == targetDateYearStr
//    }
    
    // 处理来源字符串
    func dealSourceText(source: String?){
        // <a href="http://weibo.com" rel="nofollow">新浪微博</a>
        
        guard let s = source else {
            return
        }
        
        // 截取中间字符串
        // 取到开始截取的位置
        if let startIndex = s.rangeOfString("\">")?.endIndex {
            // 取到结束截取的位置
            if let endIndex = s.rangeOfString("</")?.startIndex {
                sourceText = "来自 \(s.substringWithRange(startIndex..<endIndex))"
            }
        }
    }
    
    
    /// 通过数量计算该数量显示的文字
    ///
    /// - parameter count:         数量
    /// - parameter defaultString: 默认要显示文字(count=0的时候)
    ///
    /// - returns: <#return value description#>
    private func stringWithCount(count: Int, defaultString: String) -> String {
        /**
        以转发来说,如果有转发数据,那么就显示对应数量
        - 如果低于10000 --> 直接显示数字
        - 如果低于10900 --> 显示1万
        - 如果高于11000(12003) --> 显示 1.x 万
        */
        if count < 10000 {
            if count == 0 {
                return defaultString
            }else{
                return "\(count)"
            }
        }else{
            let result = CGFloat(count / 1000) / 10
            let resultStr = "\(result)万"
            
            if resultStr.containsString(".0") {
                return resultStr.stringByReplacingOccurrencesOfString(".0", withString: "")
            }
            return resultStr
        }
    }
    
    
    
}
